package com.jiazhong.内部类.局部内部类;
//局部内部类 **实质** 是一个 **成员变量(局部变量,放在方法内)**，所有不能添加访问修饰符，但是可以使用final修饰，因为成员变量也可以用final修饰
//作用域：仅仅在定义它的方法或者代码块中
//1.局部内部类---访问--->外部类的成员【访问方式：直接访问】
//2.外部类----访问--->局部内部类的成员【访问方式：创建对象，再访问】
//3.外部其他类----不能访问--->局部内部类的成员（因为局部内部类的实质是成员变量）
public class Demo01 {
    public static void main(String[] args) {
        Outer outer=new Outer();
        outer.m1();
        System.out.println("outer的hashcode="+outer);//等价于outer.this的hashcode，即说明为同一对象
    }
}
class Outer{
    private int n1=100;
    private void m2(){
        System.out.println("Outer方法");
        //私有方法
    }
    public void m1(){
        class Inner2{//可以访问外部类的所有成员，包括私有的
            private int n1=800;
            public void f1(){
                System.out.println("n1="+n1);
                m2();//局部内部类直接访问外部类成员

                //**重名** 问题：
                //如果外部类和内部类的成员 **重名** 时，默认遵循就近原则
                // 如果想访问外部类的成员，则可以使用 :类名.this.成员名
                System.out.println("外部类的n1"+Outer.this.n1);
                System.out.println("Outer.this hashcode="+Outer.this);
            }
        }
        Inner2 inner2=new Inner2();
        inner2.f1();
    }
}
